# -*-coding:utf-8-*-
import numpy as np

"""
数组添加行或列的四种方法
"""

a1 = np.arange(12).reshape((3, 4))  # [[0 1 2 3] [4 5 6 7] [8 9 10 11]]
x1 = np.arange(6)

"""
方式一：np.c_、np.r_
"""
a2 = np.c_[a1, [[1], [2], [3]]]  # 添加1列
a3 = np.c_[a1, [[1, 1], [2, 2], [3, 3]]]  # 添加多列
a4 = np.r_[a1, [[1, 2, 3, 4]]]  # 添加1行
a5 = np.r_[a1, [[1, 2, 3, 4], [5, 6, 7, 8]]]  # 添加多行
x2 = np.r_[x1, [6, 7, 8]]  # 一维数组合并

"""
方式二：np.append
def append(arr: Union[ndarray, Iterable, int, float],
           values: Union[ndarray, Iterable, int, float],
           axis: Optional[int] = None) 
"""
a6 = np.append(a1, [[1, 2, 3, 4]])  # axis为None时添加后的数组会变成一维的,[0 1 2 3 4 5 6 7 8 9 10 11 1 2 3 4]
a7 = np.append(a1, [[1], [2], [3]], axis=1)  # 添加1列
a8 = np.append(a1, [[1, 1], [2, 2], [3, 3]], axis=1)  # 添加多列
a9 = np.append(a1, [[1, 2, 3, 4]], axis=0)  # 添加1行
a10 = np.append(a1, [[1, 2, 3, 4], [5, 6, 7, 8]], axis=0)  # 添加1行
x3 = np.append(x1, [6, 7, 8])  # 一维数组合并

"""
方式三：np.column_stack（或np.hstack）、np.row_stack（或np.vstack）
"""
a11 = np.hstack((a1, [[1], [2], [3]]))  # 添加1列
a12 = np.hstack((a1, [[1, 1], [2, 2], [3, 3]]))  # 添加多列
a13 = np.vstack((a1, [[1, 2, 3, 4]]))  # 添加1行
a14 = np.vstack((a1, [[1, 2, 3, 4], [5, 6, 7, 8]]))  # 添加多行
x4 = np.hstack((x1, [6, 7, 8]))  # 一维数组合并

"""
方式四：np.concatenate，此方法效率最高，而且可以一次拼接多个数组
"""
a15 = np.concatenate((a1, [[1, 2, 3, 4], [5, 6, 7, 8]], [[9, 10, 11, 12]]), axis=0)  # 拼接行
a16 = np.concatenate((a1, [[1, 1], [2, 2], [3, 3]], [[1], [2], [3]]), axis=1)  # 拼接列
x5 = np.concatenate((x1, [6, 7, 8], [9, 10, 11]))  # 一维数组合并
